package org.pps.gl.server;

import java.util.ArrayList;

import org.pps.gl.client.LoginInfo;
import org.pps.gl.client.data.EtudeInfo;
import org.pps.gl.client.data.ExperienceInfo;
import org.pps.gl.client.data.MessageInfo;
import org.pps.gl.client.data.NewsInfo;
import org.pps.gl.client.data.UserInfo;
import org.pps.gl.server.datastore.Ecole;
import org.pps.gl.server.datastore.Entreprise;
import org.pps.gl.server.datastore.Etude;
import org.pps.gl.server.datastore.Experience_Pro;
import org.pps.gl.server.datastore.MessagePrive;
import org.pps.gl.server.datastore.Profil;
import org.pps.gl.server.datastore.Specialite;
import org.pps.gl.server.datastore.Utilisateur;

import com.google.appengine.api.datastore.Entity;

public class Infos {

	public static LoginInfo getInfo(LoginInfo loginInfo, Entity user){
		loginInfo.setLoggedIn(true);
		loginInfo.setEmailAddress(user.getKey().getName());
		loginInfo.setLastname(Utilisateur.getNom(user));
		loginInfo.setFirstname(Utilisateur.getPrenom(user));

		// Récupération des informations sur l'utilisateur
		String lastName = Utilisateur.getNom(user);
		String firstName = Utilisateur.getPrenom(user);
		String dateN = Utilisateur.getDateNaissance(user);
		String statut = Profil.getStatut(Utilisateur.getProfil(user));
		String sexe = Utilisateur.getSexe(user);

		loginInfo.setLastname(lastName);
		loginInfo.setFirstname(firstName);

		loginInfo.setAllNom((ArrayList<String>) Utilisateur.getAllNom());
		loginInfo.setAllEmail((ArrayList<String>) Utilisateur.getAllEmail());
		loginInfo.setAllSpecialite((ArrayList<String>) Specialite.getAllSpecialite());
		loginInfo.setAllEntreprise((ArrayList<String>) Entreprise.getAllEntreprise());
		loginInfo.setAllSchools((ArrayList<String>) Ecole.getAllEcoles());

		// On récupère les études de l'utilisateur
		Iterable<Entity> sesEtudes = Etude.getEtudesForProfil(user.getKey().getName());
		ArrayList<EtudeInfo> listeEtude = new ArrayList<EtudeInfo>();
		Entity ecole;
		EtudeInfo etudeInfo;
		if (sesEtudes != null){
			// On récupère les études
			for (Entity etude : sesEtudes) {
				etudeInfo = new EtudeInfo();
				etudeInfo.setPeriode(Etude.getPeriodeEtude(etude));
				etudeInfo.setIdEtude(Etude.getIdEtude(etude));
				// ecole = Ecole.getEcole(user.getKey().getName());
				ecole = Ecole.getEcole(etude);

				etudeInfo.setNomEcole(Ecole.getNomEcole(ecole));
				// etudeInfo.setSpecialite(Specialite.getNomSpecialite(Specialite.getSpecialite(user.getKey().getName())));
				etudeInfo.setSpecialite(Specialite.getNomSpecialite(Specialite
						.getSpecialite(ecole)));

				listeEtude.add(etudeInfo);
			}

		}
		// On récupère les experiences pro
		Iterable<Entity> sesExperiences = Experience_Pro
				.getExperienceForUser(user.getKey().getName());
		ArrayList<ExperienceInfo> listeExperiences = new ArrayList<ExperienceInfo>();
		ExperienceInfo expInfo;
		Entity ent;

		if (sesExperiences != null)
			for (Entity experience : sesExperiences) {
				expInfo = new ExperienceInfo();
				expInfo.setPeriode(Experience_Pro
						.getPeriodeExperience(experience));
				expInfo.setDirection(Experience_Pro
						.getDirection(experience));
				expInfo.setPoste(Experience_Pro.getPoste(experience));
				expInfo.setDescription(Experience_Pro
						.getDescription(experience));
				expInfo.setDomaine(Experience_Pro
						.getDomaine(experience));
				expInfo.setExperienceId(Experience_Pro.getIdExperience(experience));
				ent = Entreprise.getEntreprise(experience);
				expInfo.setNomEntreprise(Entreprise.getNomEntreprise(ent));
				listeExperiences.add(expInfo);
			}

		// pour les demandes de mises en relation
		ArrayList<String> demandes = new ArrayList<String>();
		for (Entity s : Utilisateur.getUserDemandes(loginInfo
				.getEmailAddress())) {
			demandes.add(s.getProperty("receveur").toString());
		}

		ArrayList<String> received = new ArrayList<String>();
		for (Entity s : Utilisateur.getUserReceived(loginInfo
				.getEmailAddress())) {
			received.add(s.getProperty("demandeur").toString());
		}
		loginInfo.setDemandes(demandes);
		loginInfo.setReceived(received);

		UserInfo info = new UserInfo(user.getKey().getName(), lastName,
				firstName, dateN, sexe, statut, listeEtude,
				listeExperiences);
		info.setContacts(Utilisateur.getAllContacts(user));
		loginInfo.setUserInfo(info);

		// on récupère les messages
		Iterable<Entity> listeEntity = MessagePrive.getMessageForUser(user.getKey().getName());
		ArrayList<MessageInfo> messages = new ArrayList<MessageInfo>();
		MessageInfo messInfo;
		if (listeEntity != null) {
			for (Entity entity : listeEntity) {
				messInfo = new MessageInfo();
				messInfo.setDestinataire((String) entity
						.getProperty("destinataire"));
				messInfo.setExpediteur((String) entity
						.getProperty("expediteur"));
				messInfo.setMessage((String) entity
						.getProperty("message"));
				messInfo.setTitre((String) entity
						.getProperty("titre"));
				messInfo.setMessageId(MessagePrive.getIdMessage(entity));
				messages.add(messInfo);
				/*
				messages.add(new MessageInfo((String) entity
						.getProperty("destinataire"), (String) entity
						.getProperty("expediteur"), (String) entity
						.getProperty("message"), (String) entity
						.getProperty("titre")));
				 */
			}
		}
		loginInfo.getUserInfo().setMessages(messages);

		// on récupère les news
		ArrayList<NewsInfo> news = Utilisateur.getNews(user);
		loginInfo.getUserInfo().setNews(news);

		return loginInfo;

	}
}
